package com.tanhua.dubbo.server.service;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tanhua.common.mapper.BlackListMapper;
import com.tanhua.common.pojo.BlackList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.management.Query;
import java.util.List;

/**
 * Created with IntelliJ IDEA.
 *
 * @ClassName: BlackListService
 * @Author:王晨晗
 * @Description: 黑名单的业务层
 * @Date: 2022/01/09/21:33
 */
@Service
public class BlackListService {
    @Autowired
    private BlackListMapper blackListMapper;

    /**
     * @description 查询用户的黑名单列表
     * @param userId
     * @param page
     * @param pageSize
     * @return
     */
    public List<BlackList> queryBlackList(Long userId , Integer page , Integer pageSize){
        //分页条件
        IPage<BlackList> ipage = new Page<>(page , pageSize);
        //构建查询条件
        QueryWrapper<BlackList> wrapper = new QueryWrapper<>();
        //查询指定用户的黑名单列表,并按照创建时间降序排列
        wrapper.eq("user_id" , userId).orderByDesc("created");
        //执行查询
        IPage<BlackList> blackListIPage = blackListMapper.selectPage(ipage, wrapper);
        //返回结果
        return blackListIPage.getRecords();
    }

    /**
     * @description 根据id和黑名单用户id查询对应的记录
     * @param id
     * @param userId
     * @return
     */
    public BlackList queryBlackListById(Long id , Long userId){
        //创建查询对象
        QueryWrapper<BlackList> wrapper = new QueryWrapper<>();
        //构建查询条件
        wrapper.eq("user_id" , id).eq("black_user_id" , userId);
        //执行查询并返回结果
        return blackListMapper.selectOne(wrapper);
    }

    /**
     * @description 删除黑名单
     * @param id
     * @param userId
     * @return
     */
    public Boolean removeBlackList(Long id, Long userId) {
        //构建查询条件
        QueryWrapper<BlackList> wrapper = new QueryWrapper<>();
        wrapper.eq("user_id" , id).eq("black_user_id" , userId);
        //执行删除操作并返回结果
        return blackListMapper.delete(wrapper) > 0;
    }

    /**
     * @description 添加到黑名单
     * @param id  当前用户
     * @param userId 黑名单用户
     * @return
     */
    public Boolean addBlackList(Long id , Long userId){
        //判断用户是否已经存在黑名单
        if (ObjectUtil.isEmpty(queryBlackListById(id , userId))){
            //为空, 表示黑名单不存在,可以进行黑名单添加;
            BlackList blackList = new BlackList();
            blackList.setUserId(id);        //用户id
            blackList.setBlackUserId(userId);  //黑名单用户id
            //执行添加 返回添加结果
            return blackListMapper.insert(blackList) > 0;
        }
        //黑名单已存在 添加失败
        return false;
    }


}
